package com.syf.controller;

import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager;
import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Set;

@RestController
public class GatewayFlowRulesController {

    /**
     * localhost/gw/flow/rules  获取当前系统的限流策略(json文件)
     *
     *
     * gw-flow:(网关的限流规则【nacos配置列表:支持动态配置】)
     * [
     *     {
     *         "resource": "admin-service_router",  //资源名称: 网关:routes.id,api分组:api分组的名称
     *         "resourceMode": 0 ,    //0:网关，1:api分组   【该网关 服务名称模块 的所有资源路径: 60s访问5次后限流】
     *         "count": 5,            //60s 只能 2次
     *         "intervalSec": 60
     *     },
     *     {
     *         "resource": "admin-service-api",
     *         "resourceMode": 1,   //api分组【网关下的 指定URL设置为2次，多余该网关访问次数则无效】
     *         "count": 2,
     *         "intervalSec": 60
     *     }
     * ]
     */
    @GetMapping("/gw/flow/rules")
    public Set<GatewayFlowRule> getCurrentGatewayFlowRules(){
        return GatewayRuleManager.getRules() ;
    }

    /**
     * localhost/gw/api/groups    获取我定义的api分组(json文件)
     * localhost/admin/login     【60s访问1次后限流】 gatway配置了 localhost:80/admin/*  -> 都去访问 admin-service
     *
     * api-group: (api分组的定义【nacos配置列表】)
     * [
     *     {
     *         "apiName": "admin-service-api",
     *         "predicateItems": [
     *             {
     *                 "pattern": "/admin/login"
     *             }
     *         ]
     *     }
     * ]
     */
    @GetMapping("/gw/api/groups")
    public Set<ApiDefinition> getApiGroups(){
        return GatewayApiDefinitionManager.getApiDefinitions() ;
    }


    @GetMapping("/hh")
    public String getAp(){
        return "hahhahahhaa" ;
    }
}
